FortiGate IPsec VPN 搭建

[toc]

简介

该博客主要记录,在FortiGate上搭建IPsec VPN的过程,主要最终实现了对于site-to-siteFortiGate-to-FortiGate)和host-to-siteWindows10-to-FortiGate)的搭建

整体的网络拓扑结构

网络拓扑

FortiGate 1:网络适配器1设置为NAT192.168.152.0/24),网络适配器2设置为VMnet1192.168.159.0/24
FortiGate 2:网络适配器1设置为NAT192.168.152.0/24),网络适配器2设置为VMnet3192.168.200.0/24
pc1:网络适配器设置为VMnet1192.168.159.0/24
pc2:网络适配器设置为VMnet3192.168.200.0/24

在配置host-to-site时,会在NAT上再连接一个windows10的机器

注: pc1的网关需要设置为192.168.159.3pc2的网络需要设置为192.168.200.3,否则pc1会通过192.168.159.2直接pingpc2

FortiGate1的配置

配置 port1 和 port2

首先对于port1port2有如下设置

port1不用设置DHCP Server

port1

port2设置DHCP Server

port2

配置 NAT 和 Firewall

接下来我们需要使得内网的流量能走出去,因此设置NAT和流量的转发

NAT

Firewall-Policy

注: 这里的NAT有一些并不在Central SNAT的地方开启,而在Firewall Policy中开启

配置 IPSec VPN site-to-site(FortiGate1-to-FortiGate2)

IPSec Tunnels中选择Site-To-Site进行配置

FortiGate1-IPSec-Wizard-VPN-Setup

我们设置FortiGate2的端口地址以及预共享密钥

注: 这里显示冲突,因为我之前已经配好了,所以才会显示Duplicate entry found.

FortiGate1-IPSec-Wizard-Authentication

设置本地的子网和远程的子网

FortiGate1-IPSec-Wizard-Policy-Routing

最后会如下显示,如果Create之后,成功了,说明配置暂时(理论上)没问题

FortiGate1-IPSec-Wizard-Review

这个时候没有连接的话,会显示Inactive,而如果已经连接的话会显示up

IPSec-Tunnels

我们接下来将其转换成Custom来看看其具体配置是什么,即如果直接用custom配置的话,应该如何做

FortiGate1-Edit

可以看到远程网关地址,对应端口,认证方法,ike版本,模式,阶段一协商用的算法,DH Groups组数,阶段二的配置

FortiGate1-FortiGate2-Custom

FortiGate2也如法炮制的配置一遍即可

FortiGate2-FortiGate1-Custom

注: 对于site-to-site中的Inactive图标的地方,可以单击点进去,使用Bring up将其启动

配置 IPSec VPN host-to-site(win10-to-FortiGate1)

IPSec Tunnels中选择Remote Access进行配置

FortiGate1-Win10-VPN-Setup

这里需要提前设置一个L2TP_GroupGroup类型是防火墙,设置一个用户win1

FortiGate1-Win10-VPN-Authentication

注: 这里的Client Address RangeIPSec VPN连接过来之后,这个FortiGate1会给这个用户分配的地址范围是什么,这里我原来设置为子网192.168.159.0/24不成功,所以才如此设置,当然也可以自行再次尝试是否可以为192.168.159.0/24

FortiGate1-Win10-VPN-Policy-Routing

FortiGate1-Win10-VPN-Review

FortiGate1-Win10-VPN-Custom

最终连接的效果会让连接者有一个173.31.1.0/24IP

Win10-IP

PC1 PC2 配置

基本不需要配置,因为FortiGate1FortiGate2配置好了,但是要注意中间发包是否是ESP

最主要的配置,需要将PC1的网关设置为192.168.159.3PC2的网关设置为192.168.200.3

否则PC1要么直接不需要隧道就可以到PC2,要么就是PC1不能通过隧道走到PC2

sudo route add default gw 192.168.159.3

sudo route add default gw 192.168.200.3

内部如果需要真的上网,则需要将fortigate1fortigate2配置一个静态的路由,从0.0.0.0均走到192.168.152.2(如果不上网,可以直接设置disable),然后再配置pc1pc2DNS Server就好了

Win10的配置

对于Windows10,选择VPN的地方,可以直接进行如下设置
Win10-IPSec-VPN

但是这个时候我连接失败了,通过抓包和查看FortiGate1debug log以及支持的协商加密和认证算法,可以推测是因为Win10的加密算法都是AESDES3,而FortiGate都是DES,所以一直协商失败,于是就需要配置Win10IPSec属性

高级安全 Windows Defender 防火墙属性 - IPSec设置中,可以自定义设置IPSec用于建立安全连接的设置

在自定义设置中,将密钥交换(主模式)、数据保护(快速模式)、身份验证方式均设置为高级,最主要的是为了能协商成功
Win10-IPSec-Setting-Main-Mode
Win10-IPSec-Setting-Quick-Mode
Win10-IPSec-Setting-Auth

然后还需要配置如下内容的连接安全规则,记得勾选使用IPSec隧道
Win10-Defender-Security-Policy

引用

https://github.com/hwdsl2/setup-ipsec-vpn/tree/master

DHCP NAT配置

https://handbook.fortinet.com.cn/策略与对象/单线路上网配置/DHCP线路上网配置.html
https://blog.csdn.net/meigang2012/article/details/118978718

IPSec VPN配置

https://handbook.fortinet.com.cn/VPN技术/系统原生客户端接入/Windows系统/Windows_IKEv1.html

Win10配置

https://blog.csdn.net/qq_44484541/article/details/130057300

后续抓包解密

https://blog.csdn.net/rfc2544/article/details/121063565
https://www.golinuxcloud.com/wireshark-decrypt-ipsec-packets-isakmp-esp/

IPSec VPN报文

https://cshihong.github.io/2019/04/03/IPSec-VPN之IKE协议详解
https://handbook.fortinet.com.cn/VPN技术/IPSec_VPN/IPSec_VPN原理.html


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!